﻿#ifndef _SIMPLE_THREAD_H_
#define _SIMPLE_THREAD_H_


#include "Base.h"

namespace base
{

    struct OS_Thread_Priv
    {
#if defined(WIN32)
        HANDLE hThread;
#else
        pthread_t hThread;
#endif
    };

    class SimpleThread
    {
    public:
        SimpleThread();

        virtual ~SimpleThread();

        // 启动线程, 保证Start()函数结束时，线程已经开始执行
        virtual int Start();

        virtual int Stop();

        virtual bool IsStop();

        // 等待线程关闭
        virtual void Join();

        // 子类需要重载此函数
        // Run()函数运行在新建的线程内
        virtual void Run() = 0;

        // HANDLE ThreadId() { return thread_id_; }

        void ThreadMain();

    private:
        void* m_Priv;
        bool is_stop_;

		DISALLOW_COPY_AND_ASSIGN(SimpleThread);
    };

} // namespace Thread

#endif // _SIMPLE_THREAD_H_
